﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Persistente.Avaliacao
{
    public class PDenunciaAvaliacao
    {
        private DB_SIMETRIA _db;
        private SqlConnection _conexao = new SqlConnection(ConfigurationManager.ConnectionStrings["DB_SIMETRIA_SQL"].ConnectionString);

        public bool Salvar(int idUsuario, int idAvaliacao)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var tbDenunciaAvaliacao = new tb_denuncia_avaliacao();
                tbDenunciaAvaliacao.usuario_id_usuario = idUsuario;
                tbDenunciaAvaliacao.avaliacao_id_avaliacao = idAvaliacao;
                _db.AddTotb_denuncia_avaliacao(tbDenunciaAvaliacao);
                _db.SaveChanges();

                return true;

            }
            catch (Exception e)
            {
                return false;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public DataSet pegarDenunciasAvaliacao(int idUsuario =0, int idAvaliacao =0)
        {
            var ds = new DataSet();

            string query = "SELECT ";
            query += "  da.id_denuncia_avaliacao";
            query += ", u.id_usuario";
            query += ", u.nm_usuario";
            query += ", u.te_nome";
            query += ", u.te_sobrenome";
            query += ", a.id_avaliacao";
            query += ", a.ds_avaliacao";
            query += " FROM tb_denuncia_avaliacao da";
            query += ", tb_usuario u";
            query += ", tb_avaliacao a";

            query += " WHERE da.usuario_id_usuario = u.id_usuario";
            query += " AND da.avaliacao_id_avaliacao = a.id_avaliacao ";

            if (idUsuario != 0)
            {
                query += " AND u.id_usuario =" + idUsuario;
            }

            if (idAvaliacao != 0)
            {
                query += " AND a.id_avaliacao =" + idAvaliacao;
            }

            var cmd = new SqlCommand(query, _conexao);

            cmd.Connection = _conexao;

            if (_conexao.State == ConnectionState.Closed)
            {
                _conexao.Open();
            }

            var dataAdapter = new SqlDataAdapter(cmd);
            dataAdapter.Fill(ds);

            _conexao.Close();

            return ds;
        }

        public bool Remover(int idDenunciaAvaliacao)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var obTbDenunciaAvaliacao = _db.tb_denuncia_avaliacao.Where(q => q.id_denuncia_avaliacao == idDenunciaAvaliacao).FirstOrDefault();
                if (obTbDenunciaAvaliacao == null)
                {
                    return false;
                }
                else
                {
                    _db.tb_denuncia_avaliacao.DeleteObject(obTbDenunciaAvaliacao);
                    _db.SaveChanges();
                    return true;
                }

            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public bool Alterar(int idDenunciaAvaliacao, tb_denuncia_avaliacao obTbDenunciaAvaliacaoNovo)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var obTbDenunciaAvaliacaoVelho =
                    _db.tb_denuncia_avaliacao.Where(q => q.id_denuncia_avaliacao == idDenunciaAvaliacao).FirstOrDefault();

                obTbDenunciaAvaliacaoVelho.usuario_id_usuario = obTbDenunciaAvaliacaoNovo.usuario_id_usuario;
                obTbDenunciaAvaliacaoVelho.avaliacao_id_avaliacao = obTbDenunciaAvaliacaoNovo.avaliacao_id_avaliacao;


                _db.SaveChanges();
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public tb_denuncia_avaliacao pegarDenunciaAvaliacaoPorId(int idDenunciaAvaliacao)
        {
            try
            {
                _db = new DB_SIMETRIA();
                return _db.tb_denuncia_avaliacao.Where(q => q.id_denuncia_avaliacao == idDenunciaAvaliacao).FirstOrDefault();
            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        }
    }
}
